/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.view;

import br.jm.financeiro.datamodel.LazyBairro;
import br.jm.financeiro.entity.CepBairro;
import br.jm.financeiro.entity.CepCidade;
import br.jm.financeiro.entity.CepUf;
import br.jm.financeiro.sistema.eao.BairroEao;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author joao
 */
public class BairroBean implements Serializable {

    private static final long serialVersionUID = 1L;
    //private final static Logger logger = //Logger.getLogger(BairroBean.class.getName());
    private CepBairro selectedBairro;
    private BairroEao bairroEAO;
    private LazyDataModel<CepBairro> lazyModel;
    private CepCidade selectedCidade;

    public BairroBean() {
        selectedCidade = new CepCidade();
        selectedBairro = new CepBairro();
        bairroEAO = BairroEao.getInstance();

        lazyModel = new LazyBairro(bairroEAO);
    }

    public void inserir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            if (selectedCidade != null) {
                selectedBairro.setCodCidade(selectedCidade);
            }
            selectedBairro.setCodBairro(null);

            bairroEAO.create(selectedBairro);
            LoginBean.AtualizaLog("", "INCLUSÃO BAIRRO: ".concat(selectedBairro.getDscBairro()));

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bairro Inserido com Sucesso",
                    selectedBairro.getDscBairro());

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Inserir" + selectedBairro.getDscBairro(), e.getMessage());
        } finally {
            selectedBairro = null;
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            if (selectedCidade != null) {
                selectedBairro.setCodCidade(selectedCidade);
            }
            bairroEAO.edit(selectedBairro);
            LoginBean.AtualizaLog("", "ALTERAÇÃO BAIRRO: ".concat(selectedBairro.getDscBairro()));
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bairro Alterado com Sucesso",
                    selectedBairro.getDscBairro());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Alterar: " + selectedBairro.getDscBairro(), e.getMessage());
        } finally {
            selectedCidade = null;
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            bairroEAO.destroy(selectedBairro);
            LoginBean.AtualizaLog("", "EXCLUSÃO BAIRRO: ".concat(selectedBairro.getDscBairro()));
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bairro Excluido com Sucesso",
                    selectedBairro.getDscBairro());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Erro ao Excluir: " + selectedBairro.getDscBairro(), e.getMessage());
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public LazyDataModel<CepBairro> getLazyModel() {
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel<CepBairro> lazyModel) {
        this.lazyModel = lazyModel;
    }

    public CepBairro getSelectedBairro() {
        return selectedBairro;
    }

    public void setSelectedBairro(CepBairro selectedBairro) {
        this.selectedBairro = selectedBairro;
    }

    public void onRowSelectNavigate(SelectEvent event) {
        try {
            CepCidade cidade = new CepCidade();
            cidade = (CepCidade) event.getObject();

            selectedCidade = cidade;

            this.selectedBairro.setCodCidade(selectedCidade);
        } catch (Exception ex) {
            //Logger.getLogger(BairroBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void onRowSelect(SelectEvent event) {
        try {
            this.selectedBairro = (CepBairro) event.getObject();
        } catch (Exception ex) {
            //Logger.getLogger(BairroBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public CepCidade getSelectedCidade() {
        return selectedCidade;
    }

    public void setSelectedCidade(CepCidade selectedCidade) {
        this.selectedBairro.setCodCidade(selectedCidade);
        this.selectedCidade = selectedCidade;
    }

    public void preparaInserir(ActionEvent actionEvent) {
        CepUf cepUf = new CepUf();
        this.selectedCidade = new CepCidade();
        this.selectedCidade.setCodUf(cepUf);
        this.selectedBairro.setCodCidade(selectedCidade);
    }
}
